import re
common_used_numerals ={'零':0, '一':1, '二':2, '两':2, '三':3, '四':4, '五':5, '六':6, '七':7, '八':8, '九':9, '十':10, '百':100, '千':1000}
common_used_numerals_cn ={'零':0, '一':1, '二':2, '两':2, '三':3, '四':4, '五':5, '六':6, '七':7, '八':8, '九':9, '十':10, '百':100, '千':1000,
                          "万":10000, "亿":100000000}
def chinese2digits(uchars_chinese):
  total = 0
  r = 1              #表示单位：个十百千...
  for i in range(len(uchars_chinese) - 1, -1, -1):
    val = common_used_numerals.get(uchars_chinese[i])
    if val >= 10 and i == 0:  #应对 十三 十四 十*之类
      if val > r:
        r = val
        total = total + val
      else:
        r = r * val
        #total =total + r * x
    elif val >= 10:
      if val > r:
        r = val
      else:
        r = r * val
    else:
      total = total + r * val
  return str(total)


def an2cn(words):
    nums = chinese2digits(words)
    return str(nums)

def an2cn_2(words):
    str1 = ""
    for i in range(len(words)):
        str1 += str(common_used_numerals.get(words[i]))
    return str1
#
# s = '我在18年'
# pattern = r"([零一二三四五六七八九十百千]+)([万|亿|百亿|千亿|万亿])"
# pattern_cn = r"([零一二三四五六七八九十百千]+)"
# pattern_an = r"([0123456789]+)([万|亿|百亿|千亿|万亿])"
# pattern_year = r"([0123456789]+)[年]"
# if re.search(pattern, s):
#     print(an2cn(pattern_cn, s))
# elif re.search(pattern_an, s):
#     print(str(re.search(pattern_an, s).group(1)) + str(common_used_numerals_cn.get(re.search(pattern_an, s).group(2)))[1:])
# elif re.search(pattern_year, s):
#     print("20" + an2cn(pattern_year, s) + "年")

# question1  我拥有一千五百万  阿拉伯数字+单位
# question2 我拥有15万
# question3 我在17年
# question4  哪个公司18年12月5日成立

'''
1: 我想知道有多少家公司的市值低于一百亿元?   ->   我想知道有多少家公司的市值低于100亿元？
2: 哪些楼盘平均售价低于2万或者容积率小于2   ->   哪些楼盘平均售价低20000或者容积率小于2
3: 预计在2011年，还有2012年每股的盈余都在1以上的公司有多少个   ->   预计在2011年，还有2012年每股的盈余都在1以上的公司有多少个
4: 有多少家企业11年和12年预计每股税后利润都高于1   ->   有多少家企业2011年和2012年预计每股税后利润都高于1
5: 你好啊，你帮我算一下到底有多少家公司一六年定向增发新股，并且是为了融资收购其他资产的呀   ->   你好啊，你帮我算一下到底有多少家公司2016年定向增发新股，并且是为了融资收购其他资产的呀
6: 请问一下啊哪个公司2019年1月7号到13号的周票房超过1000万的   ->   请问一下啊哪个公司2019/1/7到13号的周票房超过1000万的
7: 我想问一下市值超100亿的股票的19E每股收益和本益比分别是多少   ->   我想问一下市值超100亿的股票的19E每股收益和本益比分别是多少
3(~): 预计在11年，还有2012年每股的盈余都在1以上的公司有多少个   ->   预计在2011年，还有2012年每股的盈余都在1以上的公司有多少个
5-6(~): 预计在一一年，还有2012年每股的盈余都在1以上的公司有多少个   ->   预计在2011年，还有2012年每股的盈余都在1以上的公司有多少个
'''

s = "预计在一一年，还有2012年每股的盈余都在1以上的公司有多少个"
pattern_1 = r"(?P<num>[零一二三四五六七八九十百千]+)(?P<unit>[万|亿|百亿|千亿|万亿])"  # 五百万 -- 500万
pattern_2 = r"\D(?P<num>[0123456789])(?P<unit>[万|亿|百亿|千亿|万亿])"  # 5万  --- 50000  万前面为单数个数字
pattern_3 = r"[1|2][0-9][123456789]{2}[年]\D"  # 2016年  --- 2016年
pattern_4 = r"(?P<word>\D)(?P<year>[1][0-9])[年]"        # 16年  --- 2016
pattern_5 = r"(?P<year>[一二三四五六七八九]{2})[年]"  # "一六年" --- 2016
pattern_6 = r"(?P<year>\d+)年(?P<month>\d+)月(?P<day>\d+)[日|号]" # 2018年12月2号 -- 2018/12/2
pattern_7 = r"(?P<num>[0123456789]{2,})(?P<unit>[万|百万|千万||亿|百亿|千亿|万亿])"  # 50万  --- 50万  5千万 -> 5千万 万前面为双数个数字


def parse1(matched):
    num = matched.group('num')  # 五百
    unit = matched.group('unit') # 万|亿|百亿|千亿|万亿
    num = an2cn(num)  # 五百 -> 500
    return num + unit

def parse2(matched):
    num = matched.group('num')
    unit = matched.group('unit')
    print(num)
    return num + str(common_used_numerals_cn[unit])[1:]

def parse4(matched):
    # 防止2011年这种情况被解析为202011年
    word = matched.group('word')
    year = matched.group('year')
    print(word)
    print(year)
    if word:
        return word + "20" + year + '年'
    else:
        return "20" + year + '年'

def parse5(matched):
    year = matched.group('year')
    return "20" + an2cn_2(year) + '年'

def parse6(matched):
    year = matched.group('year')
    month = matched.group('month')
    day = matched.group('day')
    return year + '/' + month + '/' + day

def parse7(matched):
    num = matched.group('num')
    unit = matched.group('unit')
    return num + unit

if re.search(pattern_1, s):
    s = re.sub(pattern_1, parse1, s)
    print("1")
    print(s)
elif re.search(pattern_2, s):
    s = re.sub(pattern_2, parse2, s)
    print("2")
    print(s)
elif re.search(pattern_4, s):
    s = re.sub(pattern_4, parse4, s)   # 你好，请跟我说一下一六年和11年福州土地供应面积分别是多少谢谢 -> 你好，请跟我说一下2016年和2011年福州土地供应面积分别是多少谢谢
    s = re.sub(pattern_5, parse5, s)
    print("4")
    print(s)
elif re.search(pattern_5, s):
    s = re.sub(pattern_5, parse5, s)
    s = re.sub(pattern_4, parse4, s)
    print("5")
    print(s)
elif re.search(pattern_6, s):
    print("6")
    s = re.sub(pattern_6, parse6, s)
    print(s)
elif re.search(pattern_7, s):
    print("7")
    s = re.sub(pattern_7, parse7, s)
    print(s)
else:
    print("3")
    print(s)

from typing import Union
# def hello(number:int) -> str:
#     return f"this number is {number}"
#
# import logging
#
# logging.basicConfig(level=logging.DEBUG)
# logging.getLogger(__name__)
# import re
#
# s1 = "我们是2019年12月23日出生"
# def hello1(matched):
#     year = matched.group('year')
#     month = matched.group('month')
#     day = matched.group('day')
#     return year + '/' + month + '/' + day
#
# print(re.search("\d+", s1))
# print(re.sub("(?P<year>\d+)年(?P<month>\d+)月(?P<day>\d+)日", hello1, s1))

